package com.jieshuibao.controller;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import com.jieshuibao.service.RedisService;


@Controller
@RequestMapping(value="/random")
public class RandomCodeImageController {
	
	@Resource
	private RedisService redisService;
	
	
	 public Color getRandColor(int fc, int bc) {
	        Random rand = new Random();
	        if (fc > 255) {
	            fc = 255;
	        }
	        if (bc > 255) {
	            bc = 255;
	        }
	        int r = fc + rand.nextInt(bc - fc);
	        int g = fc + rand.nextInt(bc - fc);
	        int b = fc + rand.nextInt(bc - fc);
	        return new Color(r, g, b);
	    }
	 
	@RequestMapping(value="/randCode/{codeMessage}")
	public void imgCode(HttpServletResponse response,@PathVariable String codeMessage) throws IOException {
		// 首先设置页面不缓存
     response.setHeader("Pragma", "No-cache");
     response.setHeader("Cache-Control", "no-cache");
     response.setContentType("image/jpeg");
     response.setDateHeader("Expires", 0);

     // 定义图片的宽度和高度
     int width = 90, height = 40;
     // 创建一个图像对象
     BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
     // 得到图像的环境对象
     Graphics g = image.createGraphics();

     Random random = new Random();
     // 用随机颜色填充图像背景
     g.setColor(getRandColor(180, 250));
     g.fillRect(0, 0, width, height);
     for (int i = 0; i < 5; i++) {
         g.setColor(getRandColor(50, 100));
         int x = random.nextInt(width);
         int y = random.nextInt(height);
         g.drawOval(x, y, 4, 4);
     }
     // 设置字体，下面准备画随机数
     g.setFont(new Font("", Font.PLAIN, 40));
     // 随机数字符串
     String sRand = "";
     for (int i = 0; i < 4; i++) {
         // 生成四个数字字符
         String rand = String.valueOf(random.nextInt(10));
         sRand += rand;
         // 生成随机颜色
         g.setColor(new Color(20 + random.nextInt(80), 20 + random.nextInt(100), 20 + random.nextInt(90)));
         // 将随机数字画在图像上
         g.drawString(rand, (17 + random.nextInt(3)) * i + 8, 34);

         // 生成干扰线
         for (int k = 0; k < 100; k++) {
             int x = random.nextInt(width);
             int y = random.nextInt(height);
             int xl = random.nextInt(9);
             int yl = random.nextInt(9);
             g.drawLine(x, y, x + xl, y + yl);
         }
     }
     redisService.set(codeMessage, sRand, 100);
     //alogger.warn("生成的验证码为："+sRand);
     // 使图像生效
     g.dispose();
     // 输出图像到页面
     ImageIO.write(image, "JPEG", response.getOutputStream());
   
	}
	

}
